package org.japo.java.entities;

import java.awt.Image;
import java.awt.Toolkit;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.net.URL;
import javax.swing.Icon;
import javax.swing.ImageIcon;

/**
 *
 * @author José A. Pacheco Ondoño - joanpaon@gmail.com
 */
public class Alumno {

    // Ruta de la imagen predeterminada
    final String URL = "/org/japo/java/resources/images/alguien.png";

    // Tamaño de escalado
    final int ANCHO = 132;
    final int ALTO = 176;

    // Soporte para cambio de propiedad
    private transient final PropertyChangeSupport propertyChangeSupport
            = new PropertyChangeSupport(this);

    // Identificación de propiedades
    public static final String PROP_EXP = "exp";
    public static final String PROP_NOMBRE = "nombre";
    public static final String PROP_APELLIDOS = "apellidos";
    public static final String PROP_NAC = "nac";
    public static final String PROP_NIF = "nif";
    public static final String PROP_TELEFONO = "telefono";
    public static final String PROP_EMAIL = "email";
    public static final String PROP_DOMICILIO = "domicilio";
    public static final String PROP_LOCALIDAD = "localidad";
    public static final String PROP_PROVINCIA = "provincia";
    public static final String PROP_CP = "cp";
    public static final String PROP_USER = "user";
    public static final String PROP_PASS = "pass";
    public static final String PROP_FOTO = "foto";

    // Propiedades
    private String exp;
    private String nombre;
    private String apellidos;
    private String nac;
    private String nif;
    private String telefono;
    private String email;
    private String domicilio;
    private String localidad;
    private String provincia;
    private String cp;
    private String user;
    private String pass;
    private Icon foto;

    public Alumno() {
        exp = "";
        nombre = "";
        apellidos = "";
        nac = "";
        nif = "";
        telefono = "";
        email = "";
        domicilio = "";
        localidad = "";
        provincia = "";
        cp = "";
        user = "";
        pass = "";
        foto = obtenerImagenRecurso(URL, ANCHO, ALTO);
    }

    public String getExp() {
        return exp;
    }

    public void setExp(String exp) {
        String oldExp = this.exp;
        this.exp = exp;
        propertyChangeSupport.firePropertyChange(PROP_EXP, oldExp, exp);
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        String oldNombre = this.nombre;
        this.nombre = nombre;
        propertyChangeSupport.firePropertyChange(PROP_NOMBRE, oldNombre, nombre);
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        String oldApellidos = this.apellidos;
        this.apellidos = apellidos;
        propertyChangeSupport.firePropertyChange(PROP_APELLIDOS, oldApellidos, apellidos);
    }

    public String getNac() {
        return nac;
    }

    public void setNac(String nac) {
        String oldNac = this.nac;
        this.nac = nac;
        propertyChangeSupport.firePropertyChange(PROP_NAC, oldNac, nac);
    }

    public String getNif() {
        return nif;
    }

    public void setNif(String nif) {
        String oldNif = this.nif;
        this.nif = nif;
        propertyChangeSupport.firePropertyChange(PROP_NIF, oldNif, nif);
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        String oldTelefono = this.telefono;
        this.telefono = telefono;
        propertyChangeSupport.firePropertyChange(PROP_TELEFONO, oldTelefono, telefono);
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        String oldEmail = this.email;
        this.email = email;
        propertyChangeSupport.firePropertyChange(PROP_EMAIL, oldEmail, email);
    }

    public String getLocalidad() {
        return localidad;
    }

    public void setLocalidad(String localidad) {
        String oldLocalidad = this.localidad;
        this.localidad = localidad;
        propertyChangeSupport.firePropertyChange(PROP_LOCALIDAD, oldLocalidad, localidad);
    }

    public String getDomicilio() {
        return domicilio;
    }

    public void setDomicilio(String domicilio) {
        String oldDomicilio = this.domicilio;
        this.domicilio = domicilio;
        propertyChangeSupport.firePropertyChange(PROP_DOMICILIO, oldDomicilio, domicilio);
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        String oldProvincia = this.provincia;
        this.provincia = provincia;
        propertyChangeSupport.firePropertyChange(PROP_PROVINCIA, oldProvincia, provincia);
    }

    public String getCp() {
        return cp;
    }

    public void setCp(String cp) {
        String oldCp = this.cp;
        this.cp = cp;
        propertyChangeSupport.firePropertyChange(PROP_CP, oldCp, cp);
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        String oldUser = this.user;
        this.user = user;
        propertyChangeSupport.firePropertyChange(PROP_USER, oldUser, user);
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        String oldPass = this.pass;
        this.pass = pass;
        propertyChangeSupport.firePropertyChange(PROP_PASS, oldPass, pass);
    }

    public Icon getFoto() {
        return foto;
    }

    public void setFoto(Icon foto) {
        Icon oldFoto = this.foto;
        this.foto = foto;
        propertyChangeSupport.firePropertyChange(PROP_FOTO, oldFoto, foto);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }

    private Icon obtenerImagenRecurso(String nombre, int ancho, int alto) {
        // Crea una ruta
        URL url = getClass().getResource(nombre);

        // Imagen a partir de la ruta de la foto
        Image imagenIni = Toolkit.getDefaultToolkit().getImage(url);

        // Crea una imagen escalada al tamaño deseado
        Image imagenEsc = imagenIni.getScaledInstance(ancho, alto,
                Image.SCALE_AREA_AVERAGING);

        // Devuelve un objeto ImageIcon
        return new ImageIcon(imagenEsc);
    }
}
